package Narzedzia;

import PrzestrzenCiagla.CiaglyZbiorRozmyty;
import PrzestrzenCiagla.PrzestrzenCiagla;

public class CalkowanieNumeryczne {

	public static float metodaTrapezowa(CiaglyZbiorRozmyty zbior){
		PrzestrzenCiagla przestrzen = zbior.getPrzestrzen();
		
		float a = przestrzen.getPoczatek();
		float b = przestrzen.getKoniec();
		float n = 1000;
		
		float sum=0.0f;
		float dx = (Math.abs(a-b))/(n);
		
		float x=a+dx;
		
		while(x < b){
			sum=sum+((zbior.getPrzynaleznosc(x-dx)+zbior.getPrzynaleznosc(x))*dx/2);
			x+=dx;
		}
		//dla konca przedzialu
		x = b;
		sum=sum+((zbior.getPrzynaleznosc(x-dx)+zbior.getPrzynaleznosc(x))*dx/2);
		
		return sum;
	}
//	===========================================================================
	public static float metodaSimpsona(CiaglyZbiorRozmyty zbior){
		PrzestrzenCiagla przestrzen = zbior.getPrzestrzen();
		
		float a = przestrzen.getPoczatek();
		float b = przestrzen.getKoniec();
		float n = 1000;
		
		float sum = 0.0f;
		float t = 0.0f;  //t to jest srodek danego przedzialu
		float dx = (Math.abs(a-b))/(n);
		float x=a+dx;
		
		while(x < b){
			t=((x-dx)+(x))/2.0f;
			sum=sum + (zbior.getPrzynaleznosc(x-dx)+zbior.getPrzynaleznosc(x)+(4*zbior.getPrzynaleznosc(t)));
			x+=dx;
		}
		//dla konca przedzialu
		x = b;
		t=((x-dx)+(x))/2.0f;
		sum=sum + (zbior.getPrzynaleznosc(x-dx)+zbior.getPrzynaleznosc(x)+(4*zbior.getPrzynaleznosc(t)));
		
		//wynik
		sum=(b-a)/(6*n) * sum;
		return sum;
	}
}
